package com.csd.service;

import java.util.List;

import com.csd.pojo.ChangeRecord;
import com.csd.pojo.EvaluateItem;
import com.csd.pojo.Project;
import com.csd.pojo.ProjectType;
import com.csd.vo.ProjectVO;
import com.csd.vo.TeacherTaskVO;
/**
 * 项目业务逻辑接口
 * @author 尹华彬，刘世彬，sanmu
 *	<br>创建于2009-12-17
 */
public interface IProjectService 
{
	public boolean deleteProject(Integer id);

	public Project getProjectByID(Integer id);

	/** 获得指导项目 */
	public List<Project> listProjectByTeacherID(Integer teacherID);

	/** 通过团队信息查找项目 */
	public List<Project> listProjectByTeam(Integer id);

	/** 通过老师ID 获得项目的最后任务 */
	public List<Project> listFinTaskByTeacherID(Integer teacherID) ;
	
	/*通过教师id获取需要评审的申请中的项目*/
	public List<Project> listWaitReviewProjectByTeacherID(Integer teacherID);

	/** 通过评审项获得项目信息 */
	public List<TeacherTaskVO> listProjectByList(List<EvaluateItem> evaluateList);

	public List<TeacherTaskVO> listProjectByChangeList(
			List<ChangeRecord> changRecordList) ;

	public List<TeacherTaskVO> listProjectByFinalList(List<Project> projectList);

	public boolean saveProject(Project project);

	public boolean updateProject(Project project);


	/**
	 * 查询团队的项目信息
	 * @return
	 */
	public List<Project> listTeamProject();
	
	/**
	 * 查询历史项目
	 * @return 项目对象列表
	 */
	public List<ProjectVO> listHistoryProject();
	
	/**
	 * 查询未受理的项目
	 * @return 项目对象列表
	 */
	public List<ProjectVO> listUnhandleProject(String state);
	
	/**
	 * 管理员待完成的前期项目通过与否的审查列表
	 * @return 项目对象列表
	 */
	public List<ProjectVO> listProjectApplyEvaluate();
	
	/**
	 * 列出未初期评审登录成绩的项目
	 * @return 项目对象列表
	 */
	public List<ProjectVO> listUnregisterScoreProject(String state);
	
	/**
	 * 列出进行中的项目
	 * @return 项目对象列表
	 */
	public List<ProjectVO> listDevelopingProject();
	
	/**
	 * 根据项目id查询其所属于的项目类别
	 * @param projectID 项目id
	 * @return 项目类别
	 */
	public ProjectType findProjectTypeByProjectID(Integer projectID);
	
	/**
	 * 管理员通过或驳回项目申请
	 * @param action 1通过或0驳回
	 * @param level 项目级别
	 * @return 修改成功返回true
	 */
	public boolean projectApplyPassOrReject(Integer projectID, String action, String level);
	
	/**团队是否可以申请项目*/
	public boolean isEnableApply();
	
	public boolean applyEnd();
	
	
	/**
	 * 查询未受理的项目
	 * @return 项目对象列表
	 */
	public List<Project> listUnhandleProject();
	
	/**
	 * 查询已分配评审的项目
	 * @param cycle 项目所处的开发周期，申请，开发中还是结题
	 * @return 项目对象列表
	 */
	
	public boolean updateProject(Integer projectID, String result);
	
	public boolean updateReviewProject(Integer projectID , String result);
	
	/**转换到下一个状态:用于分配老师的状态控制 ,返回分配页面参数*/
	public String changeToNextState(Integer projectID);
	
}
